达梦DM7 与 mybatis生成自增ID

您所在的位置:网站首页 mybatis 排序字段自增 达梦DM7 与 mybatis生成自增ID

达梦DM7 与 mybatis生成自增ID

2024-06-28 19:49| 来源: 网络整理| 查看: 265

在《DM7与mybatis(一)——基本CRUD》中,我们介绍了dm7与mybatis的环境集成和基本配置,实现基本的CRUD操作。

在应用开发过程中,ID生成是一种常见的需求,通常基于数据库的自增列(如sqlserver、mysql)、序列(如Oracle)来自动生成。DM7同时支持自增列、序列,本文将介绍如何利用DM7和mybatis实现ID自动生成。

环境准备参见《DM7与mybatis(一)——基本CRUD》。

 

一、读取序列值生成ID

      1、创建示例表和序列

-- 以test用户登录执行以下脚本

-- user_id序列

CREATESEQUENCE seq_user_id

  INCREMENTBY 1 STARTWITH 1

  MAXVALUE 2147483647;

 

-- 用户信息表

CREATETABLE t_user_seq

(

    id   INTNOTNULL,--用户标识

    name   VARCHAR(20)NOTNULL,--姓名

    phone VARCHAR(50),-- 手机

    email VARCHAR(50),-- 邮箱

    PRIMARYKEY(id)

);

2、pojo对象

由于表t_user_seq和(一)当中表t_user的字段相同,我们可以复用原来的User对象以及对应的alias定义。

package  org.dmstudy.mybatis.domain;

 

publicclass User {

 

    private Integer id;

    private String name;

    private String phone;

    private String email;

   /getter/setter省略

}

 

3、XML映射文件

在resources\mybatis-config.xml中,新增一个mapper配置,加载IdMapper.xml。

     ……

   

   

       

       

   

     ……

新增 org/dmstudy/mybatis/id/dao/IdMapper.xml文件,其内容如下:

DOCTYPEmapper

  PUBLIC"-//mybatis.org//DTD  Mapper 3.0//EN"

  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

 

   

        select seq_user_id.nextval  from dual

   

   

   

        insert into t_user_seq

        (id,name,phone,email)

        values

        (#{id},#{name},#{phone},#{email})

     

 

注意namespace值对应为"org.dmstudy.mybatis.id.dao.IdMapper"。

其中id=getNextUserId的SELECT节点配置的sql语句是从序列seq_user_id中获取下一个序列值,该值根据定义从1开始,每次增量为1。

id=insert的INSERT节点配置了向表t_user_seq插入记录的语句。

 

4、Mapper接口

创建org.dmstudy.mybatis.id.dao.IdMapper.java文件,内容如下:

package  org.dmstudy.mybatis.id.dao;

import  org.dmstudy.mybatis.domain.User;

publicinterface IdMapper  {

    int  getNextUserId();

    int insert(User  user);

}

注意接口的全名org.dmstudy.mybatis.id.dao.IdMapper、接口方法getNextUserId、insert与IdMapper.xml中的namespace、语句映射节点id保持一致。

 

5、调用代码

package  org.dmstudy.mybatis.id;

……

publicclass IdApp {

    ……

    publicvoid insert() {

        System.out.println("---  insert  ---");

 

        // 新建user对象,注意未设置id值

        User user = new User();

        user.setName("dmtech");

        user.setPhone("400-6489899");

        user.setEmail("[email protected]");

 

        SqlSession sqlSession = sqlSessionFactory.openSession();

        try {

             // 获取mapper对象

             IdMapper mapper = sqlSession.getMapper(IdMapper.class);

 

             // 获取id值

             Integer id = mapper.getNextUserId();

             System.out.println("成功获取seq_user_id的nextval: " + id);

             // 设置id值

             user.setId(id);

 

             // 将user插入数据库

             intcnt = mapper.insert(user);

             sqlSession.commit();

             System.out.println("成功插入 " + cnt + "条记录! ");

 

        } catch (Exception e) {

             System.out.println("insert执行失败 ,原因:" + e.getMessage());

             e.printStackTrace();

             sqlSession.rollback();

        } finally {

             sqlSession.close();

        }

    }

}

 

查看执行过程输出log4j日志信息

---insert ---

DEBUG [main] - Opening JDBC Connection

DEBUG [main] - Created connection 288994035.

DEBUG [main] - Setting autocommit to false on JDBC  Connection [dm.jdbc.driver.DmdbConnection@1139b2f3]

DEBUG [main] - ==>   Preparing: select seq_user_id.nextval from dual

DEBUG [main] - ==> Parameters:

DEBUG [main] -    Preparing: insert into t_user_seq (id,name,phone,email) values  (?,?,?,?)

DEBUG [main] - ==> Parameters: 40(Integer),  dmtech(String), 400-6489899(String), [email protected](String)

DEBUG [main] -   Preparing: insert into t_user_seq  (id,name,phone,email) values (seq_user_id.nextval,?,?,?)

DEBUG  [main] - ==> Parameters: dmtech(String), 400-6489899(String), [email protected](String)

DEBUG  [main] -   Preparing: select seq_user_id.nextval from dual  

DEBUG  [main] - ==> Parameters:

DEBUG  [main] -  Preparing: insert into t_user_seq  (id,name,phone,email) values (?,?,?,?)

DEBUG  [main] - ==> Parameters: 42(Integer),  dmtech(String), 400-6489899(String), [email protected](String)

DEBUG  [main] -   Preparing: insert into t_user_ident  (name,phone,email) values (?,?,?)

DEBUG  [main] - ==> Parameters: dmtech(String), 400-6489899(String), [email protected](String)

DEBUG  [main] -   Preparing: select  @@identity

DEBUG  [main] - ==> Parameters:

DEBUG  [main] -   Preparing: insert into t_user_ident  (name,phone,email) values (?,?,?)

DEBUG  [main] - ==> Parameters: dmtech(String), 400-6489899(String), [email protected](String)

DEBUG  [main] -



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3